/**
 * validate.js 的扩展
 */
const { cnname } = require('./regRules')
const validate = require('validate.js');

// 中文名校验
validate.validators.cnname = function (value, options = {}, key) {
    // 如果不是对象的转换成对象
    if (Object.prototype.toString.call(options) !== '[object Object]') {
        // 如果是字符串默认是错误信息
        if (typeof options === 'string') {
            options = { allowEmpty: false, notValid: options, isEmpty: options }
        } else {
            // 如果不是字符串格式的使用默认的options
            options = {}
        }
    }
    // 用户自定义的options和默认的混合
    options = validate.extend(options, { allowEmpty: false, notValid: '格式错误', isEmpty: "不能为空" })

    if (value) {
        if (!cnname.test(value)) {
            return options.notValid
        }
    } else {
        if (!options.allowEmpty) {
            return options.isEmpty
        }
    }

}

// 密码校验
validate.validators.password = function (value) {
    if (/^[0-9A-Za-z.@$!%*#_~?&^+-<>\/\\|()]{8,18}$/.test(value)) {
        let level = 0;
        // 验证存在数字
        if (/[0-9]/.test(password)) {
            level++;
        }
        // 验证存在小写字母
        if (/[a-z]/.test(password)) {
            level++;
        }
        // 验证存在大写字母
        if (/[A-Z]/.test(password)) {
            level++;
        }
        // 验证存在特殊字符
        if (/[.@$!%*#_~?&^+-]/.test(password)) {
            level++;
        }
        if (level < 3) {
            return '至少包含数字、英文字母、特殊英文字符(.@$!%*#_~?&^+-<>/|\)'
        }
    }
    return '需要包含数字、英文字母、特殊英文字符(.@$!%*#_~?&^+-<>/|\)，长度为8-18位'
}
// const message = validate({ name: '我是' }, { name: { cnname: true } })
// console.log(message)